home *** CD-ROM | disk | FTP | other *** search
- #!/bin/sh
- # pup - package update script
- # copyright (c) 2000, joseph cheek, joseph@redmondlinux.org
- # released under gpl.
- #
- # $1: full pathname of package to update
- # ex: pup /usr/src/RedmondLinux/SRPMS/mypackage-1.1-1.src.rpm
- #
- # opts: -q: quiet [don't print status messages]
- # -v: verbose
- # -f: force
-
- if [ "n$1" = "n-q" ]; then # -q
- QUIET="-q"
- shift
- fi
-
- if [ "n$1" = "n-v" ]; then # -v
- VERBOSE="-v"
- shift
- fi
-
- if [ "n$1" = "n-f" ]; then # -f
- FORCE="-f"
- shift
- fi
-
- # constants and vars
-
- RL_ROOT=/opt/redmondlinux
- BUILD_NUM_FILE=$RL_ROOT/builds/CURRENT_BUILD
- BUILD_NUM=`cat $BUILD_NUM_FILE`
- BUILD_ROOT=$RL_ROOT/builds/$BUILD_NUM
- PAT_FILE=$BUILD_ROOT/en/rl/data/regex_patterns.txt
- # use en for pattern file
-
- while [ $# -ge 1 ]; do
-
- if [ ! -r "$1" ]; then # file doesn't exist
- echo `basename $0`: can\'t find \"$1\" >&2
- shift ; continue
- fi
-
- #
- #
- # find pattern to match
-
- { while read LINE; do
-
- if [ "`echo $LINE | cut -c 1`" = "#" ] || [ "$LINE" = "" ]; then
- # comment or blank line, continue
- continue
- fi
-
- # separate the regexp and the directory
- REGEX=`echo $LINE | cut -f 1 -d \ `
- DIR=`echo $LINE | cut -f 2 -d \ `
- [ $VERBOSE ] && echo $REGEX = $DIR
-
- # test for match
- basename "$1" | grep -q -e $REGEX
- MATCH=$[ ! $? ]
- [ $VERBOSE ] && echo match = $MATCH
-
- [ $MATCH -eq 1 ] && break
-
- done } < $PAT_FILE
-
- # match?
- if [ $MATCH -eq 1 ]; then
- # yes, perform update
- [ $VERBOSE ] && echo fup $QUIET $FORCE "$1" $DIR
- # we can specify a file is not to be updated by making DIR=/dev/null
- [ "$DIR" = "/dev/null" ] && echo /dev/null && shift && continue
- fup $QUIET $FORCE "$1" $DIR
-
- # successful?
- RETURN=$?
- # no, continue
- [ $RETURN -gt 0 ] && shift && continue
- # yes, update pkgs.db
-
- BASENAME=`basename "$1"`
- UPDATED_FILE="$BUILD_ROOT/en/$DIR/$BASENAME"
-
- # source rpm?
-
- if [ "$BASENAME" = `basename "$1" .src.rpm`.src.rpm ]; then
- echo source rpm, not updating && shift && continue
- fi
-
- # get needed info
- # packed size
-
- PACK_SIZE=`ls -l $UPDATED_FILE | tr -s \ | cut -d \ -f 5`
-
- # unpacked size, package name, version, release
-
- eval `rpmextr --shell $UPDATED_FILE`
-
- # update pkgs.db line
-
- for PKGS_DB in $BUILD_ROOT/*/rl/data/pkgs.db; do
- # for each language
- [ $VERBOSE ] && echo PKGS_DB: $PKGS_DB
-
- DB_LINE=`grep \[A-Z\]*:$PKG_NAME:.* < $PKGS_DB`
- [ $VERBOSE ] && echo Old DB_LINE: $DB_LINE
-
- # if a line exists
- if [ "$DB_LINE" != "" ]; then
-
- # update it
- perl -pi -e \
- "s/:$PKG_NAME:(.*?:.*?):.*?:(.*?):.*?:.*::/:$PKG_NAME:\$1:$PKG_SIZE:\$2:$PACK_SIZE:$PKG_VERS-$PKG_RELEASE::/g" $PKGS_DB
-
- # show new line
- DB_LINE=`grep \[A-Z\]*:$PKG_NAME:.* < $PKGS_DB`
- [ $VERBOSE ] && echo -n New DB_LINE:\
- echo $DB_LINE
- fi # if a line exists
-
- done # for each language
-
- else # match?
- [ $QUIET ] || echo match not found. no add performed.
- fi
-
- shift # process next package
-
- done
-